//
//  DragCellTableView.h
//  Common
//
//  Created by guoshiqing on 2018/7/20.
//  Copyright © 2018年 www.bitkinetic.com. All rights reserved.
//

#import <UIKit/UIKit.h>

/** 为了设置相对位置时使用 */
typedef NS_ENUM(NSUInteger, DragCellType){
    DragCellType_Normal = 0,       // 普通类型
    DragCellType_RelativePosition, // 相对位置类型
};

@class DragCellTableView;
@protocol DragCellTableViewDataSource <UITableViewDataSource>

@required
/**将外部数据源数组传入，以便在移动cell数据发生改变时进行修改重排*/
- (NSArray *)originalArrayDataForTableView:(DragCellTableView *)tableView;

@end

@protocol DragCellTableViewDelegate <UITableViewDelegate>

@required
- (void)exchangeObjectAtIndex:(NSIndexPath *)idx1 withObjectAtIndex:(NSIndexPath *)idx2;
/**将修改重排后的数组传入，以便外部更新数据源*/
- (void)tableView:(DragCellTableView *)tableView newArrayDataForDataSource:(NSArray *)newArray;
@optional
/**选中的cell准备好可以移动的时候*/
- (void)tableView:(DragCellTableView *)tableView cellReadyToMoveAtIndexPath:(NSIndexPath *)indexPath;
/**选中的cell正在移动，变换位置，手势尚未松开*/
- (void)cellIsMovingAtPoint:(CGPoint)point;
/**选中的cell完成移动，手势已松开*/
- (void)cellDidEndMovingAtPoint:(CGPoint)point andAtIndexPath:(NSIndexPath *)indexPath;
/** 是否允许左右移动 */
- (BOOL)isAllowedHorizontallyMoving;
@end

@interface DragCellTableView : UITableView

@property (nonatomic, assign) id<DragCellTableViewDataSource> dataSource;
@property (nonatomic, assign) id<DragCellTableViewDelegate> delegate;
@property (nonatomic, assign) DragCellType type;

// 相对位置
@property (nonatomic, assign) CGFloat relativeX;
@property (nonatomic, assign) CGFloat relativeY;
/** 是否允许手势 */
@property (nonatomic, assign) BOOL isAllowGesture;
@end
